package com.itcast.quartz.main;

import com.itcast.quartz.job.HelloJobCronTrigger;
import com.itcast.quartz.job.HelloJobScheduler;
import com.itcast.quartz.job.HelloJobSimpleTrigger;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import java.text.SimpleDateFormat;
import java.util.Date;

public class HelloSchedulerDemoScheduler {
    public static void main(String[] args) throws SchedulerException, InterruptedException {
        //1.调度器（Scheduler），从工厂中获取调度的实例（默认实例化new StdSchedulerFactory();）
        //Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = stdSchedulerFactory.getScheduler();

        //2.任务实例（JobDetail）
        // 加载任务类，与HelloJob完成绑定，要求HelloJob实现Job接口
        JobDetail jobDetail = JobBuilder.newJob(HelloJobScheduler.class)
                //参数1：任务的名称（唯一实例）；参数2：任务组的名称，可选，默认DEFAULT
                .withIdentity("job1", "group1")
                .build();

        //3.触发器（Trigger）
        Trigger trigger = TriggerBuilder.newTrigger()
                //参数1：触发器的名称（唯一实例）；参数2：触发器组的名称
                .withIdentity("trigger1", "group1")
                .startNow()
                //日历，有日没有周
                .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ? *"))
                .build();

        //让调度器关联任务和触发器，保证按照触发器定义的条件执行任务
        Date date = scheduler.scheduleJob(jobDetail, trigger);
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("调度器开始时间是：" + dateFormat.format(date));
        //启动
        scheduler.start();
        Thread.sleep(2000L);
        //挂起
        //scheduler.standby();
        //关闭
        //scheduler.shutdown(true);
    }
}
